import { Command } from '../command.js';
import { Logger } from '../logger.js';
import { FlowController } from './flow-controller.js';

/**
 * Logs when commands failed executing, e.g. due to the executable not existing in the system.
 */
export class LogError implements FlowController {
    private readonly logger: Logger;

    constructor({ logger }: { logger: Logger }) {
        this.logger = logger;
    }

    handle(commands: Command[]) {
        commands.forEach((command) =>
            command.error.subscribe((event) => {
                this.logger.logCommandEvent(
                    `Error occurred when executing command: ${command.command}`,
                    command,
                );

                const errorText = String(event instanceof Error ? event.stack || event : event);
                this.logger.logCommandEvent(errorText, command);
            }),
        );

        return { commands };
    }
}
